/*
2021-10-15
1.求解幂集问题，给定一个包含n个元素的集合，实现求解幂集的函数。
*/

#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;
const int N=1e6;
int a[N];
int n;

int main()
{
	cin>>n;   //幂集大小
	
	for(int i=0;i<n;i++)
		cin>>a[i];
	
	for(int i=0;i<(1<<n);i++)
	{
		for(int j=0;j<n;j++)
			if((i>>j) & 1) 
				cout<<a[j]<<' ';
		cout<<endl;
	}
	 
	return 0;
} 

/*
2.求解全排列问题，给定n个互不相同的元素，实现求解全排列的函数。
*/

#include<iostream>    //蛮力法 
#include<vector>

using namespace std; 

vector<vector<int>> ps;
int n;
 
void add(int x)
{
	vector<int> s;
	s.push_back(1);
	ps.push_back(s);
	for(int i=2;i<=x;i++)                //添加i次 
	{
		vector<vector<int>> temp;
		vector<vector<int>>::iterator it;
		for(auto t:ps)                   //枚举目前的倍增    
		{
			vector<int> temp2;
			vector<int>::iterator it2;
			for(int j=0;j<i;j++)           //枚举插入位置 
			{
				temp2=t;
				it2=temp2.begin()+j;
				temp2.insert(it2,i);
				temp.push_back(temp2);
			}
			
		}
		ps=temp; 
	}
} 
 
int main()
{
	cin>>n;
	add(n);
	for(auto t:ps)
	{
		for(auto t0:t)
			cout<<t0<<' ';
		cout<<endl;
	}
	
	return 0;
}




